package com.neuedu.hw20190220;

import java.util.*;

public class HomeWork20190220 {
    public static void main(String[] args) {

        test01();
    }
    /**
     * 使用List+Map存储二维表格数据，并进行显示打印
    */
    private static void test01(){
        //创建一个Map对象，用于存储一行数据中的所有的列信息（列名-值 构成了键值对）
        //因为要求存入顺序和取出显示顺序一样，所有需要使用LinkedHashMap

        //存储第一行数据的Map
        Map<String,Object>map1=new LinkedHashMap<>();// 每一行的map对象都要重新创建，否则后面的数据会覆盖之前的

        map1.put("Num",1);
        map1.put("Name","zhangsan");
        map1.put("Sex","男");
        map1.put("Age",21);
        map1.put("Score",77);

        //存储第二行数据的Map
        Map<String,Object>map2=new LinkedHashMap<>();// 每一行的map对象都要重新创建，否则后面的数据会覆盖之前的

        map2.put("Num",2);
        map2.put("Name","Lisi");
        map2.put("Sex","女");
        map2.put("Age",20);
        map2.put("Score",88);

        //存储第三行数据的Map
        Map<String,Object>map3=new LinkedHashMap<>();// 每一行的map对象都要重新创建，否则后面的数据会覆盖之前的
        map3.put("Num",3);
        map3.put("Name","wangwu");
        map3.put("Sex","男");
        map3.put("Age",19);
        map3.put("Score",66);

        //创建一个用于存储Map集合的List
        //List集合中有几个Map对象，就表示存储了几行数据
        List<Map<String,Object>> list=new LinkedList<>();
        //每行数据map存入list中
        list.add(map1);
        list.add(map2);
        list.add(map3);

        //存储完成之后进行打印操作


        printMe(list);

    }

    /**
     * 打印存储二维表格中的List+Map数据结构中的数据
     */
    private static void printMe(List<Map<String,Object>> lst){
        if (lst!=null){
            //遍历list中的每一个元素对象
            //打印表头
            boolean isPinted=true;

            for (Map<String,Object> map:lst) {
                //打印list中的每个元素对象的信息（这个元素对象是Map）
                if (map!=null){
                    //获取Map的keyset集合对象
                    Set<String> setKeys=map.keySet();
                    //打印表头
                    //只打印一次
                    if (isPinted){
                        for (String key:setKeys) {
                            System.out.print("\t\t"+key);
                        }
                        //修改标志变量，只打印一次
                        isPinted=false;
                        //换行
                        System.out.println();
                    }
                    //转换为对keySet的遍历
                    //获取keySet的迭代器对象
                    Iterator<String>it=setKeys.iterator();
                    while (it.hasNext()){
                        //获取当前遍历的对象（key）
                        String key=it.next();
                        //通过key从Map中取出与Ksy对应的value值
                        System.out.print("\t\t"+map.get(key));
                    }
                    //换行
                    System.out.println();
                }

            }
        }

    }


}
